/**
 * 改变用户头像
 */

const userModel = require('../models/userModel')
const formidable = require('formidable')
const path = require('path')
const fs = require('fs')

function change(req, res) {
  let form = new formidable.IncomingForm()
  form.encoding = 'utf-8' // 编码
  form.keepExtensions = true // 保留扩展名
  form.uploadDir = path.join(__dirname, '../public/img/user/') //文件存储路径 最后要注意加 '/' 否则会被存在public下
  form.parse(req, (err, fileds, files) => { // 解析 formData 数据  fileds是客户端传上来的数据  files是解析后的数据
    if (!fileds.user_name) {
      return res.status(200).json({ msg: '参数错误', code: 400 })
    }
    if (err) {
      return res.status(200).json({ msg: '服务器返回错误,请稍后再试', code: 500 })
    }

    let username = fileds.user_name //用户名 用于修改用户头像路径
    let oldPath = files.file.path //获取文件路径 ~/public/images/<随机生成的文件名>.<扩展名>
    let imgname = files.file.name //前台上传时的文件名 也就是文件原本的名字
    let userImgname = imgname.replace(/[^.]+/, username) //把扩展名前的文件名给替换掉
    //我这里为了方便存储 统一将文件名改为 <用户名>.jpg
    let newPath = path.join(path.dirname(oldPath), userImgname)

    return new Promise((resolve, reject) => {
      // 改文件名
      fs.rename(oldPath, newPath, (err) => {
        if (err) {
          reject(err)
        }
        else {
          resolve()
        }
      })
    }).then(() => {
      return new Promise((resolve, reject) => {
        userModel.findOneAndUpdate({ user_name: username },  //更新用户的avatar属性
          { avatar_url: 'http://127.0.0.1:5000/public/img/user/' + userImgname }, err => {
            if (err) {
              reject(err)
            } else {
              resolve({ msg: '修改成功', code: 200 })
            }
          })
      })
    }).then(suc => {
      return res.status(200).json(suc)
    }).catch(err => {
      console.log(err)
      return res.status(200).json({ msg: '服务器返回错误，请稍后再试', code: 500 })
    })
  })
}

module.exports = {
  change
}